[MOSS]Asociar un event receiver a un ContentType 

Tags: MOSS/WSS

 

Los event receivers son una opción muy interesante que dan mucho juego a la hora de desarrollar soluciones de SharePoint.

Básicamente son eventos que se pueden asociar a elementos de listas o documentos de bibliotecas de documentos, tareas de listados de tareas,a sitios… en el momento de creación , borrado, modificación….

El objeto que implementa esta funcionalidad es SPEventReceiver del que heredaremos a la hora de declarar la clase que determine dicha funcionalidad.

Para definir la funcionalidad de un event receiver normalmente lo desarrollaremos integrado dentro de una feature, y en el fichero feature.xml vincularemos el código a ejecutar como assembly de la nueva feature.

En la mayoría de las situaciones que se me habían presentado era suficiente con declarar un event receiver asociado a una lista, ya que la problemática que solucionaba estaba circunscrita a dicha lista.

Actualmente me encuentro desarrollando un portal con variaciones y hay múltiples listas de diferentes sitios que debería vincular con el event receiver, tras investigar un rato averigüé que no solamente puede asociarse un event receiver a una lista, elemento o sitio, sino que también puede asociarse a un content type. Independiente de donde esté almacenado la lógica se ejecutará sin tener en cuenta el sitio o lista contenedor, por lo tanto para mi esta era la solución correcta.

Para esto en la feature que despliega este tipo de contenido hay que añadirle un nodo de tipo XmlDocuments, donde definiremos el evento de cada uno de los elementos que asociaremos, pro ejemplo en el siguiente caso el evento se ejecutará cada vez que se añada un nuevo elemento de este tipo de contenido o que se modifique:

 

<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <ContentType ID="CONTENT TYPE ID" Name="CONTENT TYPE NAME" Group="Custom" Description="CONTENT TYPE DESCRIPTION" Version="0">
    <FieldRefs>
      <FieldRef ID="FIELD ID" Name="FIELD NAME" />
    </FieldRefs>
   <XmlDocuments>
      <XmlDocument NamespaceURI="
http://schemas.microsoft.com/sharepoint/events">
        <spe:Receivers xmlns:spe="
http://schemas.microsoft.com/sharepoint/events">
          <Receiver>
            <Name>Event Receiver Item added</Name>
            <Type>ItemAdded</Type>
            <SequenceNumber>10000</SequenceNumber>
Assembly>Prueba, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0a26195ff03df1fd</Assembly>
            <Class>Prueba.EventRec</Class>
            <Data></Data>
            <Filter></Filter>
          </Receiver>
          <Receiver>
            <Name> Event Receiver Item updated </Name>
            <Type>ItemUpdated</Type>
            <SequenceNumber>10000</SequenceNumber>
            <Assembly>Prueba, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0a26195ff03df1fd</Assembly>
            <Class>Prueba.EventRec</Class>
            <Data></Data>
            <Filter></Filter>
          </Receiver>
        </spe:Receivers>
      </XmlDocument>
    </XmlDocuments>
  </ContentType>
</Elements>

Y el código que se ejecutaría asociado a cada una de las acciones:

namespace Prueba

{

public class EventRec:SPItemEventReceiver

{

public override void ItemUpdated(SPItemEventProperties properties)

{

base.ItemUpdated(properties);

///Codigo a ejecutar posterior evento update……

}

public override void ItemAdded(SPItemEventProperties properties)

{

base.ItemUpdated(properties);

///Codigo a ejecutar posterior evento add……

}

}}

 
Publicado por Alvaro Arias Conde en 1-Jul-09
1 Comentarios  |  Trackback Url |        
 

Comentarios


Albert comentado en Friday, 2-Oct-2009
En caso de usar Visual Studio 2008 con las extensiones de Sharepoint podemos hacer lo siguiente: 1. Crear un proyecto vacío de Sharepoint. 2. Añadir Un componente de conetnt type con RECEPTOR DE EVENTOS. 3. POner código en el itemeventreceiver por ejemplo: public override void ItemAdded(SPItemEventProperties properties) { SPListItem item = properties.ListItem; item["Title"] = "Elmeutitol"; item.Update(); } 4. POner los campos del contentype que queramos (nombre, data,..) en el xml péro nada más. 5. Implementar. El própio programa al implementar añadirá unas líneas al xml dels siguiente formato: ItemAdded ItemAdded 1 ad9765b9-fa5b-4e43-ba2c-17c160fd5cfb 6. Ya podemos activar la caraterística y comprobar que todo funcione

Nombre:
URL:
Email:
Comentarios:
CAPTCHA Image Validation